iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
自我挑戰組

透過Roblox Studio學習Lua語言與基本程式邏輯系列 第 9

Day 9: Enum的用法與玩家攝影機的各項設定

  • 分享至 

  • xImage
  •  

不知不覺就快10天了


1. Enum

我們在第一天的基本資料型態也有提過Enum這項型態,那今天我們將要更深入的探討什麼是Enum

Enum在電腦科學領域中稱為列舉,而列舉依照維基百科的定義為

列舉是一個被命名的整型常數的集合,列舉在日常生活中很常見,例如「星期」可以做為一個集合,而其枚舉如星期一、星期二、 星期三、星期四、星期五、星期六、星期日,以上稱作星期的枚舉。通俗來說,列舉就是對一個對象的所有可能取到的值的集合

很複雜對吧,你可以直接把Enum想成是把所有不能夠以整數、浮點數、字串、布林值、Color3、Vector3、CFrame等這些資料型態來改變的屬性值全部集合起來,如果你需要使用時再呼叫他的一項函式。

來舉個最簡單的例子,今天如果你想要改變一個玩家的骨架型態 (分別有R15與R6),你無法使用其他的資料型態來更改,這個時候就可以用Enum來解決

--假設用一個物件被碰到的事件作為開頭
local Part = script.Parent
Part.Touched:Connect(function(Hit)
    --我們想要在這個物件被碰到時將玩家的骨架型態改變
    local Player = game.Players:GetPlayerFromCharacter(Hit.Parent)
    if Player then
        --在玩家碰到這個Part的時候將玩家的骨架型態改為R6
        Player.Character.Humanoid.RigType = Enum.RigType.R6
    end
end)

而你也不一定只能用 . 來取得Enum屬性,以下有三種方法一樣也可以取得

GetEnumItems(): 一次取得一項Enum資料中的所有屬性 (回傳一項陣列)
FromName(): 透過該屬性的名稱取得Enum屬性 (其實這就跟直接用 . 取得一樣)
FromValue(): 透過該屬性的值取得Enum屬性 (相關的值都放在Roblox Studio的Documentation裡,我基本不會用這個函式)


2. 玩家攝影機

如果要定義玩家的攝影機,我們必須要在一份LocalScript裡定義

LocalScript是玩家客戶端專用的腳本,他只能夠在ReplicatedFirst、ReplicatedStorage、StarterGui、StarterPlayer裡面的StarterPlayerScripts這些服務裡運行。

而定義玩家攝影機的方式如

--這項程式被寫在一份localscript裡面
local Camera = workspace.CurrentCamera

這項CurrentCamera物件只能在LocalScript裡面定義,如果你使用一般的script是無法定義的,那因為我們已經定義好了Camera物件,接下來就可以更改他的各項屬性了

例如,我想要改變它的型態,讓他變成會不斷跟隨玩家的位置與旋轉角度

local Camera = workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Follow

我們也可以直接把玩家的攝影機定住

local Camera = workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Scriptable

又或者我們可以用明天會講到的CFrame來定義玩家攝影機的位置

local Camera = workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Scriptable
Camera.CFrame = CFrame.new(0, 0, 0)

但要記得,如果要對玩家攝影機做任何有關物理世界的更改 (例如位置、旋轉角度等),一定要先把玩家的攝影機定住,就是用Camera.CameraType = Enum.CameraType.Scriptable 這項指令,否則將不會生效。

以下是所有玩家攝影機的型態
Fixed: 靜止不動,Enum值為0
Attach: 以固定偏移量隨物件移,隨物件旋轉而旋轉,Enum值為1
Watch: 靜止不動,但會隨物件旋轉,Enum值為2
Track: 隨主體移動但不隨主體旋轉,Enum值為3
Follow: 隨主體移動與旋轉,Enum值為4
Custom: 預設,Enum值為5
Scriptable: 啥都不會動,你要自己設定,Enum值為6
Orbital: Y軸固定,隨物件旋轉,Enum值為7


明天我們將要進入一項非常複雜的資料型態 - CFrame與Vector3
因為他真的太難了所以明天的篇幅我預感會很長


上一篇
Day 8: 應用單元 (1)
下一篇
Day 10: Vector3與CFrame (1)
系列文
透過Roblox Studio學習Lua語言與基本程式邏輯21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言